package com.gitee.helioz.openai.common.util.http;

import com.gitee.helioz.openai.common.error.OpenAiRuntimeException;
import com.google.gson.JsonObject;

import java.util.List;
import java.util.Map;

/**
 * 〈HTTP 服务接口类〉
 *
 * @author <a href="https://gitee.com/helioz">Morning Starr</a>
 */
public interface HttpService {
    /**
     * 设置HTTP代理配置
     * @param httpProxyConfig HTTP代理配置
     */
    void setHttpProxyConfig(HttpProxyConfig httpProxyConfig);

    /**
     * GET请求.
     *
     * @param url 请求接口地址
     * @return 接口响应字符串
     * @throws OpenAiRuntimeException 异常
     */
    String get(String url) throws OpenAiRuntimeException;

    /**
     * POST Form Data请求.
     *
     * @param url       请求接口地址
     * @param formMap   表单数据
     * @param fileParts 文件集合
     * @return 接口响应字符串
     * @throws OpenAiRuntimeException 异常
     */
    String postFormData(String url, Map<String, Object> formMap, List<HttpFilePart> fileParts) throws OpenAiRuntimeException;

    /**
     * POST JSON BODY请求.
     *
     * @param postData 请求参数json值
     * @param url      请求接口地址
     * @return 接口响应字符串
     * @throws OpenAiRuntimeException 异常
     */
    String post(String url, String postData) throws OpenAiRuntimeException;

    /**
     * POST JSON BODY请求.
     *
     * @param url 请求接口地址
     * @param obj 请求对象
     * @return 接口响应字符串
     * @throws OpenAiRuntimeException 异常
     */
    String post(String url, Object obj) throws OpenAiRuntimeException;

    /**
     * POST JSON BODY请求.
     *
     * @param url        请求接口地址
     * @param jsonObject 请求对象
     * @return 接口响应字符串
     * @throws OpenAiRuntimeException 异常
     */
    String post(String url, JsonObject jsonObject) throws OpenAiRuntimeException;

    /**
     * DELETE请求.
     *
     * @param url 请求接口地址
     * @return 接口响应字符串
     * @throws OpenAiRuntimeException 异常
     */
    String delete(String url) throws OpenAiRuntimeException;

}
